<!DOCTYPE html><html lang="zh-CN" data-theme="light"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><title>mysql | 麻辣兔头川菜馆</title><meta name="keywords" content="mysql,学习笔记"><meta name="author" content="寒兔丶"><meta name="copyright" content="寒兔丶"><meta name="format-detection" content="telephone=no"><meta name="theme-color" content="#ffffff"><meta name="description" content="MySQL数据库——SQL语法SQL语句是对所有关系数据库都通用的命令语句，而JDBC API只是执行SQL语句的工具，JDBC允许对不同的平台、不同的数据库采用相同的编程接口来执行SQL语句。在开始JDBC编程之前必须掌握基本的SQL知识。 关系数据库基本概念和MySQL基本命令数据库（DataBase）仅仅是存放用户数据的地方，当用户访问、操作数据库中的数据时，需要数据库管理系统的帮助。数据管"><meta property="og:type" content="article"><meta property="og:title" content="mysql"><meta property="og:url" content="https://mengfanmingx.gitee.io/posts/2022/09/28/MySQL/"><meta property="og:site_name" content="麻辣兔头川菜馆"><meta property="og:description" content="MySQL数据库——SQL语法SQL语句是对所有关系数据库都通用的命令语句，而JDBC API只是执行SQL语句的工具，JDBC允许对不同的平台、不同的数据库采用相同的编程接口来执行SQL语句。在开始JDBC编程之前必须掌握基本的SQL知识。 关系数据库基本概念和MySQL基本命令数据库（DataBase）仅仅是存放用户数据的地方，当用户访问、操作数据库中的数据时，需要数据库管理系统的帮助。数据管"><meta property="og:locale" content="zh_CN"><meta property="og:image" content="https://mengfanmingx.gitee.io/img/default_cover.png"><meta property="article:published_time" content="2022-09-28T11:13:46.947Z"><meta property="article:modified_time" content="2022-10-23T13:25:40.503Z"><meta property="article:author" content="寒兔丶"><meta property="article:tag" content="mysql"><meta property="article:tag" content="学习笔记"><meta name="twitter:card" content="summary"><meta name="twitter:image" content="https://mengfanmingx.gitee.io/img/default_cover.png"><link rel="shortcut icon" href="/img/favicon.png"><link rel="canonical" href="https://mengfanmingx.gitee.io/posts/2022/09/28/MySQL/"><link rel="preconnect" href="//cdn.jsdelivr.net"><link rel="preconnect" href="//busuanzi.ibruce.info"><link rel="stylesheet" href="/css/index.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free/css/all.min.css" media="print" onload='this.media="all"'><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox.min.css" media="print" onload='this.media="all"'><script>const GLOBAL_CONFIG={root:"/",algolia:void 0,localSearch:{path:"/search.xml",preload:!1,languages:{hits_empty:"找不到您查询的内容：${query}"}},translate:{defaultEncoding:2,translateDelay:0,msgToTraditionalChinese:"繁",msgToSimplifiedChinese:"簡"},noticeOutdate:void 0,highlight:{plugin:"highlighjs",highlightCopy:!0,highlightLang:!0,highlightHeightLimit:!1},copy:{success:"复制成功",error:"复制错误",noSupport:"浏览器不支持"},relativeDate:{homepage:!1,post:!1},runtime:"",date_suffix:{just:"刚刚",min:"分钟前",hour:"小时前",day:"天前",month:"个月前"},copyright:{limitCount:20,languages:{author:"作者: 寒兔丶",link:"链接: ",source:"来源: 麻辣兔头川菜馆",info:"著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。"}},lightbox:"fancybox",Snackbar:void 0,source:{justifiedGallery:{js:"https://cdn.jsdelivr.net/npm/flickr-justified-gallery/dist/fjGallery.min.js",css:"https://cdn.jsdelivr.net/npm/flickr-justified-gallery/dist/fjGallery.min.css"}},isPhotoFigcaption:!1,islazyload:!1,isAnchor:!0}</script><script id="config-diff">var GLOBAL_CONFIG_SITE={title:"mysql",isPost:!0,isHome:!1,isHighlightShrink:!1,isToc:!0,postUpdate:"2022-10-23 21:25:40"}</script><noscript><style>#nav{opacity:1}.justified-gallery img{opacity:1}#post-meta time,#recent-posts time{display:inline!important}</style></noscript><script>(e=>{e.saveToLocal={set:function(e,t,o){if(0===o)return;const n=864e5*o,a={value:t,expiry:(new Date).getTime()+n};localStorage.setItem(e,JSON.stringify(a))},get:function(e){const t=localStorage.getItem(e);if(!t)return;const o=JSON.parse(t);if(!((new Date).getTime()>o.expiry))return o.value;localStorage.removeItem(e)}},e.getScript=e=>new Promise(((t,o)=>{const n=document.createElement("script");n.src=e,n.async=!0,n.onerror=o,n.onload=n.onreadystatechange=function(){const e=this.readyState;e&&"loaded"!==e&&"complete"!==e||(n.onload=n.onreadystatechange=null,t())},document.head.appendChild(n)})),e.activateDarkMode=function(){document.documentElement.setAttribute("data-theme","dark"),null!==document.querySelector('meta[name="theme-color"]')&&document.querySelector('meta[name="theme-color"]').setAttribute("content","#0d0d0d")},e.activateLightMode=function(){document.documentElement.setAttribute("data-theme","light"),null!==document.querySelector('meta[name="theme-color"]')&&document.querySelector('meta[name="theme-color"]').setAttribute("content","#ffffff")};const t=saveToLocal.get("theme");"dark"===t?activateDarkMode():"light"===t&&activateLightMode();const o=saveToLocal.get("aside-status");void 0!==o&&("hide"===o?document.documentElement.classList.add("hide-aside"):document.documentElement.classList.remove("hide-aside"));/iPad|iPhone|iPod|Macintosh/.test(navigator.userAgent)&&document.documentElement.classList.add("apple")})(window)</script><link rel="stylesheet" href="/css/custom.css"><link rel="stylesheet" href="/css/font.css"><link rel="stylesheet" href="/css/menu_center.css"><link rel="stylesheet" href="/css/rightside.css"><script src="/js/rightside.js"></script><script src="/js/changeMode.js"></script><link rel="stylesheet" href="/css/weather.css"><meta name="generator" content="Hexo 5.4.2"></head><body><div id="loading-box"><div class="loading-left-bg"></div><div class="loading-right-bg"></div><div class="spinner-box"><div class="configure-border-1"><div class="configure-core"></div></div><div class="configure-border-2"><div class="configure-core"></div></div><div class="loading-word">加载中...</div></div></div><div id="sidebar"><div id="menu-mask"></div><div id="sidebar-menus"><div class="avatar-img is-center"><img src="/img/avatar.png" onerror='onerror=null,src="/img/friend_404.gif"' alt="avatar"></div><div class="sidebar-site-data site-data is-center"><a href="/archives/"><div class="headline">文章</div><div class="length-num">5</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">6</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">4</div></a></div><hr><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i> <span>首页</span></a></div><div class="menus_item"><a class="site-page group hide" href="javascript:void(0);"><i class="fa-fw fas fa-scroll-torah"></i> <span>文章</span><i class="fas fa-chevron-down"></i></a><ul class="menus_item_child"><li><a class="site-page child" href="/archives/"><i class="fa-fw fas fa-timeline"></i> <span>时间轴</span></a></li><li><a class="site-page child" href="/categories/"><i class="fa-fw fas fa-folder-open"></i> <span>文章分类</span></a></li><li><a class="site-page child" href="/tags/"><i class="fa-fw fas fa-tags"></i> <span>标签大全</span></a></li><li><a class="site-page child" href="/random/"><i class="fa-fw fas fa-shuffle"></i> <span>随便看看</span></a></li></ul></div><div class="menus_item"><a class="site-page group hide" href="javascript:void(0);"><i class="fa-fw fas fa-heart"></i> <span>社交</span><i class="fas fa-chevron-down"></i></a><ul class="menus_item_child"><li><a class="site-page child" href="/link/"><i class="fa-fw fas fa-link"></i> <span>友链</span></a></li><li><a class="site-page child" href="/messageboard/"><i class="fa-fw fa fa-paper-plane"></i> <span>留言板</span></a></li></ul></div><div class="menus_item"><a class="site-page group hide" href="javascript:void(0);"><i class="fa-fw fas fa-gamepad"></i> <span>娱乐</span><i class="fas fa-chevron-down"></i></a><ul class="menus_item_child"><li><a class="site-page child" href="/music/"><i class="fa-fw fas fa-music"></i> <span>音乐</span></a></li><li><a class="site-page child" href="/game/"><i class="fa-fw fas fa-chess-board"></i> <span>小游戏</span></a></li></ul></div><div class="menus_item"><a class="site-page group hide" href="javascript:void(0);"><i class="fa-fw fas fa-list"></i> <span>关于</span><i class="fas fa-chevron-down"></i></a><ul class="menus_item_child"><li><a class="site-page child" href="/about/"><i class="fa-fw iconfont icon-wode"></i> <span>关于我</span></a></li><li><a class="site-page child" href="/site/"><i class="fa-fw iconfont icon-config"></i> <span>关于网站</span></a></li><li><a class="site-page child" href="/state/"><i class="fa-fw iconfont icon-dunpai"></i> <span>本站状态</span></a></li></ul></div></div></div></div><div class="post" id="body-wrap"><header class="post-bg" id="page-header" style="background-image:url('/img/default_cover.png')"><nav id="nav"><span id="blog_name"><a id="site-name" href="/">麻辣兔头川菜馆</a></span><div id="menus"><div class="nav-button" id="search-button"><a class="site-page social-icon search"><i class="fas fa-search fa-fw"></i></a></div><span id="translateBtn"><a class="nav-button" id="translateLink" type="button" title="简繁转换" name="简繁转换">繁</a></span><span id="changeMode"><a class="nav-button" id="darkmode" type="button" title="浅色和深色模式转换" name="浅色和深色模式转换" onclick="changeMode()"><i class="fas fa-adjust"></i></a></span><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i> <span>首页</span></a></div><div class="menus_item"><a class="site-page group hide" href="javascript:void(0);"><i class="fa-fw fas fa-scroll-torah"></i> <span>文章</span><i class="fas fa-chevron-down"></i></a><ul class="menus_item_child"><li><a class="site-page child" href="/archives/"><i class="fa-fw fas fa-timeline"></i> <span>时间轴</span></a></li><li><a class="site-page child" href="/categories/"><i class="fa-fw fas fa-folder-open"></i> <span>文章分类</span></a></li><li><a class="site-page child" href="/tags/"><i class="fa-fw fas fa-tags"></i> <span>标签大全</span></a></li><li><a class="site-page child" href="/random/"><i class="fa-fw fas fa-shuffle"></i> <span>随便看看</span></a></li></ul></div><div class="menus_item"><a class="site-page group hide" href="javascript:void(0);"><i class="fa-fw fas fa-heart"></i> <span>社交</span><i class="fas fa-chevron-down"></i></a><ul class="menus_item_child"><li><a class="site-page child" href="/link/"><i class="fa-fw fas fa-link"></i> <span>友链</span></a></li><li><a class="site-page child" href="/messageboard/"><i class="fa-fw fa fa-paper-plane"></i> <span>留言板</span></a></li></ul></div><div class="menus_item"><a class="site-page group hide" href="javascript:void(0);"><i class="fa-fw fas fa-gamepad"></i> <span>娱乐</span><i class="fas fa-chevron-down"></i></a><ul class="menus_item_child"><li><a class="site-page child" href="/music/"><i class="fa-fw fas fa-music"></i> <span>音乐</span></a></li><li><a class="site-page child" href="/game/"><i class="fa-fw fas fa-chess-board"></i> <span>小游戏</span></a></li></ul></div><div class="menus_item"><a class="site-page group hide" href="javascript:void(0);"><i class="fa-fw fas fa-list"></i> <span>关于</span><i class="fas fa-chevron-down"></i></a><ul class="menus_item_child"><li><a class="site-page child" href="/about/"><i class="fa-fw iconfont icon-wode"></i> <span>关于我</span></a></li><li><a class="site-page child" href="/site/"><i class="fa-fw iconfont icon-config"></i> <span>关于网站</span></a></li><li><a class="site-page child" href="/state/"><i class="fa-fw iconfont icon-dunpai"></i> <span>本站状态</span></a></li></ul></div></div><div id="toggle-menu"><a class="site-page"><i class="fas fa-bars fa-fw"></i></a></div></div></nav><div id="post-info"><h1 class="post-title">mysql</h1><div id="post-meta"><div class="meta-firstline"><span class="post-meta-date"><i class="far fa-calendar-alt fa-fw post-meta-icon"></i><span class="post-meta-label">发表于</span><time class="post-meta-date-created" datetime="2022-09-28T11:13:46.947Z" title="发表于 2022-09-28 19:13:46">2022-09-28</time><span class="post-meta-separator">|</span><i class="fas fa-history fa-fw post-meta-icon"></i><span class="post-meta-label">更新于</span><time class="post-meta-date-updated" datetime="2022-10-23T13:25:40.503Z" title="更新于 2022-10-23 21:25:40">2022-10-23</time></span><span class="post-meta-categories"><span class="post-meta-separator">|</span><i class="fas fa-inbox fa-fw post-meta-icon"></i><a class="post-meta-categories" href="/categories/mysql/">mysql</a></span></div><div class="meta-secondline"><span class="post-meta-separator">|</span><span class="post-meta-pv-cv" data-flag-title="mysql"><i class="far fa-eye fa-fw post-meta-icon"></i><span class="post-meta-label">阅读量:</span><span id="busuanzi_value_page_pv"><i class="fa-solid fa-spinner fa-spin"></i></span></span></div></div></div></header><main class="layout" id="content-inner"><div id="post"><article class="post-content" id="article-container"><h1 id="MySQL数据库——SQL语法"><a href="#MySQL数据库——SQL语法" class="headerlink" title="MySQL数据库——SQL语法"></a>MySQL数据库——SQL语法</h1><p>SQL语句是对所有关系数据库都通用的命令语句，而JDBC API只是执行SQL语句的工具，JDBC允许对不同的平台、不同的数据库采用相同的编程接口来执行SQL语句。在开始JDBC编程之前必须掌握基本的SQL知识。</p><h2 id="关系数据库基本概念和MySQL基本命令"><a href="#关系数据库基本概念和MySQL基本命令" class="headerlink" title="关系数据库基本概念和MySQL基本命令"></a>关系数据库基本概念和MySQL基本命令</h2><p>数据库（DataBase）仅仅是存放用户数据的地方，当用户访问、操作数据库中的数据时，需要数据库管理系统的帮助。数据管理系统的全称是DataBase Management System，简称DBMS。通常情况下我们会把数据库和数据库管理系统笼统的称为数据库，通常所说的数据库既包括存储用户数据的部分，也包括管理数据库的管理系统。</p><p>​ DBMS是所有数据的存储单元，它负责管理数据的存储、安全、一致性、并发、恢复和访问操作。DBMS有一个数据字典（即：系统表），用于存储它拥有的每个事物的相关信息，例如：名字、结构、位置和类型，这种关于数据的数据也被称为元数据。</p><p>​ 数据库按发展顺序，分为：网状数据库、层次数据库、关系数据库、面向对象数据库。其中关系数据库是理论最成熟、应用最广泛的数据库。在大量数据的查找、排序操作上非常成熟且快速，并对数据库的并发、隔离有非常完善的解决方案。</p><p>​ 对于关系数据库而言，最基本的数据存储单元就是数据表，我们可以简单的把数据库理解为大量数据表的集合。</p><p>​ 数据表是存储数据的逻辑单元，数据表可以理解为表格，其中每一行称为一条记录，每一列称为一个字段。为数据库建表时，通常需要指定该表包含多少列，每列的数据类型信息，不需要指定数据表包含多少行，因为数据库表的行是动态改变的。每行用于保存一条用户数据，除此之外还需要为每个数据表指定一个特殊列，该特殊列的值可以唯一的确定一条记录，则该特殊列被称为主键列。</p><h2 id="SQL语句基础"><a href="#SQL语句基础" class="headerlink" title="SQL语句基础"></a>SQL语句基础</h2><p>SQL全称是Structured Query Language，即结构化查询语言。SQL是操作和检索关系数据库的标准语言，标准的SQL语言可以用于操作任何关系数据库。</p><p>使用SQL语句，可以完成如下任务</p><ul><li><p>在数据库中检索信息</p></li><li><p>对数据库的信息进行更新</p></li><li><p>改变数据库的结构</p></li><li><p>更改系统的安全设置</p></li><li><p>增加用户对数据库或表的许可权限。</p></li></ul><p>标准的SQL语句通常可分为如下几种类型</p><ul><li><p>DQL 查询语句：主要由select关键字完成，查询语句是SQL语句中最复杂、功能最丰富的语句。</p></li><li><p>DML（Data Manipulation Language，数据操作语言）语句：主要由select 、insert、update和delete三个关键字完成。（对数据操作）</p></li><li><p>DDL（Data Definition Language，数据定义语言）语句：主要由create、alter、drop和truncate四个关键字完成。（对表操作）</p></li><li><p>DCL（Data Control Language，数据控制语言）语句：主要由grant和revoke两个关键字来完成。（对数据库用户操作）</p></li><li><p>事物控制语句：主要由commit、rollback、和savepoint三个关键字完成。</p></li></ul><p><strong>SQL语句的关键字不区分大小写，即：select和SELECT的作用完全一样。</strong></p><p>标识符规则：</p><p>在SQL命令中也可能需要使用标识符，标识符可以用于定义表名、列名，也可用于定义变量等。这些标识符的命名规则如下：</p><ul><li><p>标识符通常必须以字母开头</p></li><li><p>标识符包括字母、数字和三个特殊字符（# _ $）</p></li></ul><p>不要使用当前数据库系统的关键字、保留字，通常建议使用多个单词连缀而成，单词之间以_分隔。</p><h2 id="数据库的数据类型"><a href="#数据库的数据类型" class="headerlink" title="数据库的数据类型"></a>数据库的数据类型</h2><ol><li>整数类型</li></ol><p>根据数值取值范围的不同MySQL 中的整数类型可分为5种，分别是TINYINT、SMALUNT、MEDIUMINT、INT和 BIGINT。下图列举了 MySQL不同整数类型所对应的字节大小和取值范围而最常用的为INT类型的，</p><p><img src="https://img-blog.csdnimg.cn/73b79e82b2e34cfabc3e6d1ba62fb4d4.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBANjI2NjY2,size_20,color_FFFFFF,t_70,g_se,x_16" alt="image-20220219190157298"></p><ol start="2"><li>浮点数和定点数类型</li></ol><p>在MySQL数据库中使用浮点数和定点数来存储小数。浮点数的类型有两种：单精度浮点数类型（FLOAT)和双精度浮点数类型（DOUBLE)。而定点数类型只有一种即DECIMAL类型。下图列举了 MySQL中浮点数和定点数类型所对应的字节大小及其取值范围：</p><p><img src="https://img-blog.csdnimg.cn/328c7d72faee4dbbbe51fc3d4560ee68.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBANjI2NjY2,size_20,color_FFFFFF,t_70,g_se,x_16" alt="image-20220219190249119"></p><p>从上图中可以看出：DECIMAL类型的取值范围与DOUBLE类型相同。但是，请注意：DECIMAL类型的有效取值范围是由M和D决定的。其中，M表示的是数据的长 度，D表示的是小数点后的长度。比如，将数据类型为DECIMAL(6,2)的数据6.5243 插人数据库后显示的结果为6.52</p><ol start="3"><li>字符串类型</li></ol><p>在MySQL中常用CHAR 和 VARCHAR 表示字符串。两者不同的是：VARCHAR存储可变长度的字符串。<br><strong>当数据为CHAR(M)类型时，不管插入值的长度是实际是多少它所占用的存储空间都是M个字节；而VARCHAR(M)所对应的数据所占用的字节数为实际长度加1</strong></p><p><img src="https://img-blog.csdnimg.cn/b759bd4018f348e4803f3f2d0ddf5167.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBANjI2NjY2,size_20,color_FFFFFF,t_70,g_se,x_16" alt="image-20220219190354792"></p><ol start="4"><li>文本类型</li></ol><p>文本类型用于表示大文本数据，例如，文章内容、评论、详情等，它的类型分为如下4种：</p><p><img src="https://img-blog.csdnimg.cn/1b89e0ebae074cec863be60bf7ba8002.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBANjI2NjY2,size_20,color_FFFFFF,t_70,g_se,x_16" alt="image-20220219190445156"></p><ol start="5"><li>日期与时间类型</li></ol><p>MySQL提供的表示日期和时间的数据类型分别是 ：YEAR、DATE、TIME、DATETIME 和 TIMESTAMP。下图列举了日期和时间数据类型所对应的字节数、取值范围、日期格式以及零值：</p><p><img src="https://img-blog.csdnimg.cn/4dfbd0322eb14cd6b480e30b54e96e0c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBANjI2NjY2,size_20,color_FFFFFF,t_70,g_se,x_16" alt="image-20220219190624217"></p><ul><li>YEAR类型</li></ul><p>YEAR类型用于表示年份，在MySQL中，可以使用以下三种格式指定YEAR类型 的值。<br>1.使用4位字符串或数字表示，范围为’1901’—‘2155’或1901—2155。例如，输人 ‘2019’或2019插人到数据库中的值均为2019。<br>2.使用两位字符串表示，范围为’00’—‘99’。其中，‘00’—‘69’范围的值会被转换为 2000—2069范围的YEAR值，‘70’—‘99’范围的值会被转换为1970—1999范围的YEAR 值。例如，输人’19’插人到数据库中的值为2019。<br>3.使用两位数字表示，范围为1—99。其中，1—69范围的值会被转换为2001— 2069范围的YEAR值，70—99范围的值会被转换为1970—1999范围的YEAR值。例 如，输人19插入到数据库中的值为2019。<br>请注意：当使用YEAR类型时，一定要区分’0’和0。因为字符串格式的’0’表示的YEAR值是2000而数字格式的0表示的YEAR值是0000。</p><ul><li>TIME类型</li></ul><p>TIME类型用于表示时间值，它的显示形式一般为HH:MM:SS，其中，HH表示小时， MM表示分,SS表示秒。在MySQL中，可以使用以下3种格式指定TIME类型的值。<br>1.以’D HH:MM:SS’字符串格式表示。其中，D表示日可取0—34之间的值, 插人数据时，小时的值等于(DX24+HH)。例如，输入’2 11:30:50’插人数据库中的日期为59:30:50。<br>2.以’HHMMSS’字符串格式或者HHMMSS数字格式表示。 例如，输人’115454’或115454,插入数据库中的日期为11:54:54<br>3.使用CURRENT_TIME或NOW()输人当前系统时间。</p><ul><li>DATETIME类型</li></ul><p>DATETIME类型用于表示日期和时间，它的显示形式为’YYYY-MM-DD HH: MM:SS’，其中，YYYY表示年，MM表示月，DD表示日，HH表示小时，MM表示分，SS 表示秒。在MySQL中，可以使用以下4种格式指定DATETIME类型的值。<br>以’YYYY-MM-DD HH:MM:SS’或者’YYYYMMDDHHMMSS’字符串格式表示的日期和时间，取值范围为’1000-01-01 00:00:00’—‘9999-12-3 23:59:59’。例如，输人’2019-01-22 09:01:23’或 ‘20140122_0_90123’插人数据库中的 DATETIME 值都为 2019-01-22 09:01:23。<br>1、以’YY-MM-DD HH:MM:SS’或者’YYMMDDHHMMSS’字符串格式表示的日期和时间，其中YY表示年，取值范围为’00’—‘99’。与DATE类型中的YY相同，‘00’— ‘69’范围的值会被转换为2000—2069范围的值，‘70’—‘99’范围的值会被转换为1970—1999范围的值。<br>2、以YYYYMMDDHHMMSS或者YYMMDDHHMMSS数字格式表示的日期 和时间。例如，插入20190122090123或者190122090123,插人数据库中的DATETIME值都 为 2019-01-22 09:01:23。<br>3、使用NOW来输人当前系统的日期和时间。</p><ul><li>TIMESTAMP</li></ul><p>TIMESTAMP类型用于表示日期和时间，它的显示形式与DATETIME相同但取值范围比DATETIME小。在此，介绍几种TIMESTAMP类型与DATATIME类型不同的形式：<br>1、使用CURRENT_TIMESTAMP输人系统当前日期和时间。<br>2、输人NULL时系统会输人系统当前日期和时间。<br>3、无任何输人时系统会输入系统当前日期和时间。</p><ol start="6"><li>二进制类型</li></ol><p><img src="https://img-blog.csdnimg.cn/cb6afd4b4bad4dec9e23a61512684057.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBANjI2NjY2,size_20,color_FFFFFF,t_70,g_se,x_16" alt="image-20220219201814209"></p><h2 id="数据库基本操作DDL"><a href="#数据库基本操作DDL" class="headerlink" title="数据库基本操作DDL"></a>数据库基本操作DDL</h2><p>创建数据库</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">create database 数据库名;</span><br></pre></td></tr></table></figure><p>查看数据库</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">show databases;</span><br></pre></td></tr></table></figure><p>删除指定数据库</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">drop database 数据库名;</span><br></pre></td></tr></table></figure><p>设置数据库字符集</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">alter database 数据库名 character set 字符集;</span><br></pre></td></tr></table></figure><p>切换数据库</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">use 数据库名;</span><br></pre></td></tr></table></figure><p>查看当前使用的数据库</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">select database();</span><br></pre></td></tr></table></figure><h2 id="数据表的基本操作"><a href="#数据表的基本操作" class="headerlink" title="数据表的基本操作"></a>数据表的基本操作</h2><p>数据库创建成功后可在该数据库中创建数据表(简称为表)存储数据。请注意：在操作数据表之前应使用“USE 数据库名;”指定操作是在哪个数据库中进行先关操作，否则会抛出“No database selected”错误。</p><p>创建数据表</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">create table 表名&#123;</span><br><span class="line">  字段1 字段类型，</span><br><span class="line">  字段2 字段类型，</span><br><span class="line">  ……</span><br><span class="line">  字段n 字段类型</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>查看当前数据表</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">show tables;</span><br></pre></td></tr></table></figure><p>查看表的基本信息</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">show create table 表名;</span><br></pre></td></tr></table></figure><p>查看表的字段信息</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">desc 表名;</span><br></pre></td></tr></table></figure><p>修改表名</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">alter table 表名 rename to 新表名;</span><br></pre></td></tr></table></figure><p>修改字段名</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">alter  table  表名 change  旧名字  新名字  数据类型;</span><br></pre></td></tr></table></figure><p>修改字段数据类型</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">alter table 表名 modify 字段名 目标数据类型;</span><br></pre></td></tr></table></figure><p>增加字段</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">alter table 表名 add 字段名 字段数据类型;</span><br></pre></td></tr></table></figure><p>删除字段</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">alter table 表名 drop 字段名;</span><br></pre></td></tr></table></figure><h2 id="约束"><a href="#约束" class="headerlink" title="约束"></a>约束</h2><p>为防止错误的数据被插入到数据表，MySQL中定义了一些维护数据库完整性的规则；这些规则常称为表的约束。常见约束如下：</p><p><img src="https://img-blog.csdnimg.cn/162939f5a9e840b7b586395d3b903b19.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBANjI2NjY2,size_20,color_FFFFFF,t_70,g_se,x_16" alt="image-20220219230144879"></p><p>以上五种约束条件针对表中字段进行限制从而保证数据表中数据的正确性和唯一性。换句话说，表的约束实际上就是表中数据的限制条件。</p><ol><li>主键约束</li></ol><p>主键约束即primary key用于唯一的标识表中的每一行。被标识为主键的数据在表中是唯一的且其值不能为空。这点类似于我们每个人都有一个身份证号，并且这个身份证号是唯一的。<br>主键约束基本语法：</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">字段名 数据类型 primary key;</span><br><span class="line"></span><br><span class="line">-- 设置主键约束的两种方式</span><br><span class="line">create table student&#123;</span><br><span class="line">  id int primary key,</span><br><span class="line">  name varchar(20)</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line">create table student&#123;</span><br><span class="line">  id int,</span><br><span class="line">  name varchar(20),</span><br><span class="line">  primary key(id)</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><ol start="2"><li>非空约束</li></ol><p>非空约束即 NOT NULL指的是字段的值不能为空，基本的语法格式如下所示：</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">字段名 数据类型 not null;</span><br><span class="line"></span><br><span class="line">create table student&#123;</span><br><span class="line">  id int,</span><br><span class="line">  name varchar(20) not null</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><ol start="3"><li>默认值</li></ol><p>默认值约束即DEFAULT用于给数据表中的字段指定默认值，即当在表中插入一条新记录时若未给该字段赋值，那么，数据库系统会自动为这个字段插人默认值；其基本的语法格式如下所示：</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">字段名 数据类型 default 默认值;</span><br><span class="line"></span><br><span class="line">create table student&#123;</span><br><span class="line">  id int,</span><br><span class="line">  name varchar(20),</span><br><span class="line">  gender int default 1</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><ol start="4"><li>字段备注</li></ol><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">字段名 数据类型 comment &#x27;备注内容&#x27;;</span><br><span class="line"></span><br><span class="line">create table student&#123;</span><br><span class="line">  id int,</span><br><span class="line">  name varchar(20) comment &#x27;备注内容&#x27;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><ol start="5"><li>唯一性约束</li></ol><p>唯一性约束即UNIQUE用于保证数据表中字段的唯一性，即表中字段的值不能重复出现，其基本的语法格式如下所示：</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">字段名 数据类型 unique;</span><br><span class="line"></span><br><span class="line">create table student&#123;</span><br><span class="line">  id int,</span><br><span class="line">  name varchar(20) unique</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><ol start="6"><li>外键约束</li></ol><p>外键约束主要用于保证一个或两个数据表之间的参照完整性，外键是构建于一个表的两个字段或者两个表的两个字段之间的参照关系。外键确保了相关的两个字段的参照关系：子表（从表）外键列的值必须在主表被参照列的值范围之内，或者为空。</p><p>从表外键参照的只能是主表主键列或者唯一键列，这样才可以保证从表记录可以准确定位到被参照的主表记录，同一个表内可以拥有多个外键。</p><p>建立外键约束时，MySQL也会为该列建立索引。</p><p>外键约束通常用于定义两个实体之间的一对多，一对一的关联关系。对于一对多的关联关系，通常在多的一端增加外键列，例如老师——学生（假设一个老师对应多个学生，但每个学生只有一个老师，这是典型的一对多的关联关系）。为了建立他们之间的关联关系，可以在学生表中增加一个外键列，该列中保存此条学生记录对应老师的主键。对于一对一的关联关系，则可以选择任意一方来增加外键列，增加外键列的表被称为从表，只要为外键列增加唯一约束就可以表示一对一的关联关系了。对于多对多的关联关系，则需要额外增加一个连接表来记录他们的关联关系。</p><p>​ 建立外键约束同样可以采用列级约束语法和表级约束语法。如果仅对单独的数据列建立外键约束，则使用列级约束即可，如果需要对多列组合创建外键约束，或者需要为外键约束建指定约束名，则必须使用表级约束语法。</p><p>语法为：</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">-- 创建时语法为</span><br><span class="line">constraint 外键名 foreign key (从表外键字段) references 主表(主表字段);</span><br><span class="line">-- 表创建好后的语法为</span><br><span class="line">alter table 表名 add constraint 外键名 foreign key (从表外键字段) references 主表(主表字段);</span><br></pre></td></tr></table></figure><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">-- 为保证主表存在 所以要先建立主表</span><br><span class="line"># 学生表</span><br><span class="line">create table student(</span><br><span class="line">id int primary key,</span><br><span class="line">name varchar(20)</span><br><span class="line">);</span><br><span class="line"># 班级表</span><br><span class="line">create table class(</span><br><span class="line">classid int primary key,</span><br><span class="line">studentid int</span><br><span class="line">);</span><br><span class="line"># 学生表作为主表，班级表作为副表设置外键</span><br><span class="line">alter table class add constraint fk_class_studentid foreign key(studentid) references student(id);</span><br></pre></td></tr></table></figure><p>主从表具有数据一致性</p><p>建立外键是为了保证数据的完整和统一性。主表数据要是被删除，则从表对应的数据也会被删除。</p><p>删除外键</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">alter table 从表名 drop foreign key 外键名；</span><br><span class="line"># 接上示例</span><br><span class="line">alter table class drop foreign key fk_class_studentid;</span><br></pre></td></tr></table></figure><ol start="7"><li>check约束</li></ol><p><em>大部分数据库都支持上面5中约束，但MySQL不支持CHECK约束，虽然MySQL的SQL语句也可以使用CHECK约束，但这个CHECK约束不会有任何作用。</em></p><p>check约束 检查约束 类似于 在字段上建立一个复杂的逻辑表达式，最后返回一个布尔类型，如果符合逻辑表达式 数据存储成功，否则失败不存储数</p><p>语法为：</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">check (逻辑表达式);</span><br></pre></td></tr></table></figure><p>添加check 约束</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">-- 创建表时添加check约束</span><br><span class="line">create table student&#123;</span><br><span class="line">  id int,</span><br><span class="line">  name varchar(20),</span><br><span class="line">  age int,</span><br><span class="line">  check (age&gt;0 and age&lt;20)</span><br><span class="line">&#125;;</span><br><span class="line">-- 修改表示添加check约束</span><br><span class="line">alter table 表名 add constraint &lt;检查约束名&gt; CHECK(&lt;检查约束&gt;)</span><br></pre></td></tr></table></figure><p>删除check 约束</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">alter table 表名 drop constraint &lt;检查约束名&gt;;</span><br></pre></td></tr></table></figure><h2 id="为数据表中字段插入数据DML"><a href="#为数据表中字段插入数据DML" class="headerlink" title="为数据表中字段插入数据DML"></a>为数据表中字段插入数据DML</h2><p>插入记录<br>语法如下：</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">INSERT INTO 表名（字段名1,字段名2,...) VALUES (值 1,值 2,...);</span><br><span class="line"></span><br><span class="line">insert into student (id,name,age,gender) values (1,&#x27;bob&#x27;,16,&#x27;male&#x27;);</span><br></pre></td></tr></table></figure><p>指定字段同上 只是字段名不用全部写出</p><p>同时插入多条记录</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">INSERT INTO 表名 [(字段名1,字段名2,...)]VALUES (值 1,值 2,…),(值 1,值 2,…),...;</span><br><span class="line"></span><br><span class="line">insert into student (id,name,age,gender) values (2,&#x27;lucy&#x27;,17,&#x27;female&#x27;),(3,&#x27;jack&#x27;,19,&#x27;male&#x27;),(4,&#x27;tom&#x27;,18,&#x27;male&#x27;);</span><br></pre></td></tr></table></figure><p>更新记录</p><p>update基本语法为</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">UPDATE 表名 SET 字段名1=值1[,字段名2 =值2,…] [WHERE 条件表达式];</span><br><span class="line"></span><br><span class="line">update student set age=20,gender=&#x27;female&#x27; where id = 2;</span><br><span class="line">-- 一般是根据主键来进行修改</span><br></pre></td></tr></table></figure><p>update更新全部记录</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">-- 将所有记录的age设为18</span><br><span class="line">update student set age=18;</span><br></pre></td></tr></table></figure><p>删除记录</p><p>delete基本语法为</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">DELETE FROM 表名 [WHERE 条件表达式];</span><br><span class="line">-- 删除年龄为14的所有记录</span><br><span class="line">delete from student where age=14;</span><br></pre></td></tr></table></figure><p>delete删除所有数据</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">delete from 表名; -- 不用加where 条件就可以</span><br></pre></td></tr></table></figure><p>TRUNCATE和DETELE都能实现删除表中的所有数据的功能，但两者也是有区别的：<br>1、DELETE语句后可跟WHERE子句，可通过指定WHERE子句中的条件表达式只删除满足条件的部分记录；但是，TRUNCATE语句只能用于删除表中的所有记录。<br>2、使用TRUNCATE语句删除表中的数据后，再次向表中添加记录时自动增加字段的默认初始值重新由1开始；使用DELETE语句删除表中所有记录后，再次向表中添加记录时自动增加字段的值为删除时该字段的最大值加1<br>3、DELETE语句是DML语句，TRUNCATE语句通常被认为是DDL语句</p><h2 id="单表查询"><a href="#单表查询" class="headerlink" title="单表查询"></a>单表查询</h2><h3 id="查询"><a href="#查询" class="headerlink" title="查询"></a>查询</h3><p>查看表全部记录</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">select * from 表名;</span><br></pre></td></tr></table></figure><p>查询某一字段记录</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">select 字段名(,字段名) from 表名;</span><br></pre></td></tr></table></figure><p>加where可以增加限制条件 找到符合条件的记录</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">select 字段名 from 表名 where 限制条件;</span><br></pre></td></tr></table></figure><h3 id="算数运算符"><a href="#算数运算符" class="headerlink" title="算数运算符"></a>算数运算符</h3><p>当使用select语句进行查询时，还可以在select语句中使用算术运算符（+ - * /），从而形成算术表达式。使用算术表达式的规则如下：</p><p>1、 对数值型数据列、变量、常量可以使用算术运算符（+ - * /）创建表达式。</p><p>2、 对日期型数据列、变量、常量可以使用部分算术运算符（+ -）创建表达式，两个日期之间可以进行减法运算，日期和数值之间可以进行加法、减法运算。</p><p>3、 运算符不仅可以在列和常量、变量之间运算，也可以在两列之间运算。</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">select tea_id+5 from teacher #将tea_id当成变量来使用在原有的基础上+5</span><br><span class="line">  </span><br><span class="line">select * from teacher where tea_id*3&gt;12 #  查询出teacher表中id的值*3之后会大于12的所有记录</span><br></pre></td></tr></table></figure><p>需要指出的是，select后的不仅可以是数据列，也可以是表达式，还可以是变量、常量等。如下SQL所示：</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">select 3*5 ,20 from teacher</span><br></pre></td></tr></table></figure><h3 id="过滤重复信息"><a href="#过滤重复信息" class="headerlink" title="过滤重复信息"></a>过滤重复信息</h3><p>如果在查询记录中出现重复记录，则可以使用distinct关键字去除重复数据，distinct紧跟select语句</p><p><strong>在SELECT查询语句中DISTINCT关键字只能用在第一个所查列名之前。</strong></p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">select distinct 字段 from 表名;</span><br><span class="line"></span><br><span class="line">select distinct gender from student;</span><br></pre></td></tr></table></figure><h3 id="起别名"><a href="#起别名" class="headerlink" title="起别名"></a>起别名</h3><ol><li>为表起别名</li></ol><p>在查询操作时，假若表名很长使用起来就不太方便，此时可为表取一个別名，用该别名来代替表的名称。语法格式如下所示：</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">select * from 表名 [as] 表的别名;</span><br><span class="line"></span><br><span class="line">select * from student as stu;</span><br></pre></td></tr></table></figure><p>as可以省略。如果别名中间有空格，需要对整个别名加上引号（虽然说起别名是为了让名字看起来比较方便，但也不排除会让名字更加具体详细的情况）</p><ol start="2"><li>为字段起别名</li></ol><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">select 字段1 as 别名1,字段2 as 别名2，…… from 表名;</span><br><span class="line"></span><br><span class="line">select name as &#x27;姓名&#x27;,id from student;</span><br></pre></td></tr></table></figure><h2 id="数据库函数"><a href="#数据库函数" class="headerlink" title="数据库函数*"></a>数据库函数*</h2><h3 id="聚合函数"><a href="#聚合函数" class="headerlink" title="聚合函数"></a>聚合函数</h3><ol><li><p>在数据库查询过程中，不仅只返回数据的基础信息，有时还需对这些数据进行统计和汇总。MySQL 提供了聚合函数，用于实现这些高级功能。</p></li><li><p>聚合函数用于对一组值进行计算并返回一个汇总值，使用聚合函数可以统计记录行数、计算某个字段值的总和以及这些值的最大值、最小值和平均值等。</p></li></ol><p><img src="https://img-blog.csdnimg.cn/1335ebfd9ffd487b945956e4c032f851.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBANjI2NjY2,size_20,color_FFFFFF,t_70,g_se,x_16" alt="image-20220220000026779"></p><ol><li><p>count</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">-- 统计表中数据的行数或者统计指定列其值不为NULL的数据个数</span><br><span class="line">select count(*) from 表名;</span><br></pre></td></tr></table></figure></li><li><p>max</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">-- 计算指定列的最大值，如果指定列是字符串类型则使用字符串排序运算</span><br><span class="line">select max(字段名) from 表名;</span><br></pre></td></tr></table></figure></li><li><p>min</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">-- 计算指定列的最小值，如果指定列是字符串类型则使用字符串排序运算</span><br><span class="line">select min(字段名) from 表名;</span><br></pre></td></tr></table></figure></li><li><p>sum</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">-- 计算指定列的数值和，如果指定列类型不是数值类型则计算结果为0</span><br><span class="line">select sum(字段名) from 表名;</span><br></pre></td></tr></table></figure></li><li><p>avg</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">-- 计算指定列的平均值，如果指定列类型不是数值类型则计算结果为</span><br><span class="line">select avg(字段名) from 表名;</span><br></pre></td></tr></table></figure></li></ol><h3 id="日期时间函数"><a href="#日期时间函数" class="headerlink" title="日期时间函数"></a>日期时间函数</h3><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">-- 以‘YYYY-MM-DD HH:MM:SS’或YYYYMMDDHHMMSS格式返回当前的日期和时间</span><br><span class="line">NOW();</span><br><span class="line"></span><br><span class="line">-- 返回日期date的星期索引(1=星期天，2=星期一, …7=星期六)。</span><br><span class="line">dayofweek(date);</span><br><span class="line"></span><br><span class="line">-- 返回date的星期索引(0=星期一，1=星期二, ……6= 星期天)。</span><br><span class="line">weekday(date);</span><br><span class="line"></span><br><span class="line">-- 返回date的月份中的日期，在1到31范围内。</span><br><span class="line">dayofmonth(date);</span><br><span class="line"></span><br><span class="line">-- 返回date在一年中的日数, 在1到366范围内</span><br><span class="line">dayofyear(date);</span><br><span class="line"></span><br><span class="line">-- 返回date的月份，范围1到12。</span><br><span class="line">month(date);</span><br><span class="line"></span><br><span class="line">-- 返回date的星期名字。</span><br><span class="line">dayname(date);</span><br><span class="line"></span><br><span class="line">-- 返回date的月份名字。</span><br><span class="line">monthname(date);</span><br><span class="line"></span><br><span class="line">-- 返回date一年中的季度，范围1到4。</span><br><span class="line">quarter(date);</span><br><span class="line"></span><br><span class="line">-- 完成两个date相减操作</span><br><span class="line">datediff(被减日期,减数日期);</span><br><span class="line"></span><br><span class="line">-- 使用date_add函数需要两个参数，日期、数值类型带单位</span><br><span class="line">date_add(date,interval int type)</span><br><span class="line">(type = month/day/year)</span><br><span class="line"></span><br><span class="line">-- 加天数</span><br><span class="line">adddate(date,day);</span><br><span class="line"></span><br><span class="line">-- 获取当前日期</span><br><span class="line">curdate();</span><br><span class="line"></span><br><span class="line">-- 获取当前时间</span><br><span class="line">curtime()</span><br></pre></td></tr></table></figure><h3 id="字符串函数"><a href="#字符串函数" class="headerlink" title="字符串函数"></a>字符串函数</h3><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">-- 返回来自于参数连结的字符串。如果任何参数是NULL，返回NULL。可以有超过2个的参数。一个数字参数被变换为等价的字符串形式。</span><br><span class="line">CONCAT(str1,str2,...);</span><br><span class="line"></span><br><span class="line">-- 返回字符串str的长度</span><br><span class="line">LENGTH(str);</span><br><span class="line"></span><br><span class="line">-- 对str从x截取y个长度</span><br><span class="line">substring(str,x,y);</span><br><span class="line"></span><br><span class="line"></span><br></pre></td></tr></table></figure><h3 id="数学（数值）函数"><a href="#数学（数值）函数" class="headerlink" title="数学（数值）函数"></a>数学（数值）函数</h3><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">-- 返回X绝对值</span><br><span class="line">ABS(X)    返回绝对值</span><br><span class="line"></span><br><span class="line">-- 返回N被M除的余数</span><br><span class="line">MOD(N,M);</span><br><span class="line"></span><br><span class="line">-- 返回不大于X的整数</span><br><span class="line">FLOOR(X);</span><br><span class="line"></span><br><span class="line">-- 返回不小于X的整数</span><br><span class="line">CEILING(X);</span><br><span class="line"></span><br><span class="line">-- 返回X的四舍五入的一个整数</span><br><span class="line">ROUND(X);</span><br></pre></td></tr></table></figure><h3 id="流程控制函数"><a href="#流程控制函数" class="headerlink" title="流程控制函数"></a>流程控制函数</h3><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">-- 在第一个方案的返回结果中， value=compare-value。而第二个方案的返回结果是第一种情况的真实结果。如果没有匹配的结果值，则返回结果为ELSE后的结果，如果没有ELSE 部分，则返回值为 NULL。</span><br><span class="line">CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END</span><br><span class="line"></span><br><span class="line">eg:</span><br><span class="line">select case student_name </span><br><span class="line">when chengji&gt;90 then &quot;好学生&quot;</span><br><span class="line">when chengji&gt;60 then &quot;一般学生&quot;</span><br><span class="line">when chengji&gt;0 then &quot;差学生&quot;</span><br><span class="line">else &quot;不是学生&quot;</span><br><span class="line">from student;</span><br><span class="line"></span><br><span class="line">-- 如果exper1为null，则返回exper2，否则返回exper1</span><br><span class="line">ifnull(exper1,exper2);</span><br><span class="line"></span><br><span class="line">-- 如果exper1和exper2相等，则返回null，否则返回exper1</span><br><span class="line">nullif(exper1,exper2);</span><br><span class="line"></span><br><span class="line">-- 三目运算符，如果exper1为true，不等于0且不等于null，则返回exper2，否则返回exper3</span><br><span class="line">if(exper1,exper2,exper3);</span><br><span class="line"></span><br><span class="line">-- 判断exper1是否为null，如果为null作为查询结果返回为1</span><br><span class="line">isnull(exper1);</span><br></pre></td></tr></table></figure><p>ps:函数语法一般为 select 函数名() from 表名</p><p>虽然此处介绍了一些MySQL常用函数的简单用法，但通常不推荐在Java程序中使用特定数据库的函数，因为将导致程序代码与特定的数据库耦合；如果把程序移植到其他数据库系统上时，可以能需要打开源码，重新修改SQL语句。</p><h2 id="条件查询"><a href="#条件查询" class="headerlink" title="条件查询"></a>条件查询</h2><p>数据库中存有大量数据，我们可根据需求获取指定的数据。此时，我们可在查询语句中通过WHERE子句指定查询条件对查询结果进行过滤。</p><ol><li><p>关系运算符</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">select * from 表名 where 字段&gt;=18;</span><br></pre></td></tr></table></figure><p><img src="https://img-blog.csdnimg.cn/5f6b49a3aa6747b39571614d04f42ef9.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBANjI2NjY2,size_20,color_FFFFFF,t_70,g_se,x_16" alt="image-20220221000115932"></p></li><li><p>IN关键字用于判断某个字段的值是否在指定集合中。如果字段的值恰好在指定的集合中，则将字段所在的记录将査询出来。</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">select * from 表名 where 字段名 in(需要查询的字段);</span><br></pre></td></tr></table></figure></li><li><p>BETWEEN AND用于判断某个字段的值是否在指定的范围之内。如果字段的值在指定范围内，则将所在的记录将查询出来</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">select * from 表名 where 字段名 between 范围1 and 范围2;</span><br></pre></td></tr></table></figure></li><li><p>使用 IS NULL关键字判断字段的值是否为空值。请注意：空值NULL不同于0，也不同于空字符串</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">select * from 表名 where 字段名 is not null;</span><br></pre></td></tr></table></figure></li><li><p>在MySQL中可使用AND关键字可以连接两个或者多个查询条件。</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">select * from 表名 where age&gt;15 and gender=&#x27;male&#x27;;</span><br></pre></td></tr></table></figure></li><li><p>在使用SELECT语句查询数据时可使用OR关键字连接多个査询条件。在使用OR关键字时，只要记录满足其中任意一个条件就会被查询出来</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">select * from 表名 where age&gt;15 or gender=&#x27;male&#x27;;</span><br></pre></td></tr></table></figure></li><li><p>MySQL中可使用LIKE关键字可以判断两个字符串是否相匹配</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">select * from 表名 where 字段名 like &#x27;wang&#x27;;</span><br></pre></td></tr></table></figure></li><li><p>%用于匹配任意长度的字符串。例如，字符串“a%”匹配以字符a开始任意长度的字符串,或者”%a%”匹配字符中间包含a的任意长度字符串(一般用于模糊搜索)</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">select * from 表名 where 字段名 like &#x27;li%&#x27;;</span><br></pre></td></tr></table></figure></li><li><p>当执行查询数据时可能会返回很多条记录，而用户需要的数据可能只是其中的一条或者几条</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">select * from 表名 order by 字段名 asc limit 限制条数;</span><br></pre></td></tr></table></figure></li><li><p>group by 分组查询</p></li></ol><p>假设有一个年级表，表中有学生姓名学生年龄以及学生班级。我们可以用group by 根据学生班级分成不同的班级组 再根据不同班级计算相应要求</p><p>eg：计算每个班的平均年龄</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">select avg(age),class from school group by class;</span><br></pre></td></tr></table></figure><p>group by可以与聚合函数和having一起使用</p><p><strong>ps：where 后面不可以跟聚合函数</strong></p><p>eg：统计班级平均年龄为18岁以上的班级</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">select avg(age),class from school group by class having avg(age)&gt;18; </span><br></pre></td></tr></table></figure><ol start="11"><li>使用order by 对查询结果排序</li></ol><p>语法为：</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">SELECT 字段名1,字段名2,…</span><br><span class="line">FROM 表名</span><br><span class="line">ORDER BY 字段名1 [ASC 丨 DESC],字段名2 [ASC | DESC];</span><br></pre></td></tr></table></figure><p>在该语法中：字段名1、字段名2是查询结果排序的依据；参数 ASC表示按照升序排序，DESC表示按照降序排序；默认情况下，按照ASC方式排序。通常情况下，ORDER BY子句位于整个SELECT语句的末尾。</p><h2 id="多表连接查询"><a href="#多表连接查询" class="headerlink" title="多表连接查询"></a>多表连接查询</h2><p>在某些情况下我们所需要的数据并不是来源于一个表，而是来源于多个数据表，这就需要使用多表连接查询。例如，对于学生表和教师表，如果希望查询出所有学生以及他的老师名字，这就需要从两个表中取数据。</p><h3 id="交叉连接查询-笛卡尔积"><a href="#交叉连接查询-笛卡尔积" class="headerlink" title="交叉连接查询(笛卡尔积)"></a>交叉连接查询(笛卡尔积)</h3><p>交叉连接返回的结果是被连接的两个表中所有数据行的<strong>笛卡儿积</strong>；比如：集合A={a,b}，集合B={0,1,2}，则集合A和B的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}。所以，交叉连接也被称为笛卡尔连接，其语法格式如下：</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">select * from 表1 cross join 表2;</span><br><span class="line">select * from 表1,表2;</span><br></pre></td></tr></table></figure><p>在该语法中：CROSS JOIN用于连接两个要查询的表，通过该语句可以查询两个表中所有的数据组合。<br><strong>由于这个交叉连接查询在实际运用中没有任何意义，所以只做为了解即可</strong></p><h3 id="内连接"><a href="#内连接" class="headerlink" title="内连接"></a>内连接</h3><h4 id="自然连接"><a href="#自然连接" class="headerlink" title="自然连接"></a>自然连接</h4><p>自然连接表面上看起来也无须指定连接条件，但自然连接是有连接条件的，自然连接会以<strong>两个表中的同名列</strong>作为连接条件，如果两个表中没有同名列，则自然连接与交叉连接的效果完全一样。</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">select * from 表1,表2 where 表1.id = 表2.id;</span><br></pre></td></tr></table></figure><h4 id="using子句连接"><a href="#using子句连接" class="headerlink" title="using子句连接"></a>using子句连接</h4><p>using子句可以指定一列或多列，用于显式指定两个表中的同名列作为连接条件。假设两个表中有超过一列的同名列，如果使用using子句，就可以显示指定使用哪些同名列作为连接条件。</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">select s.*,表2字段名 from 表1  s（别名）  join 表2 using(连接条件/同名列);</span><br></pre></td></tr></table></figure><h4 id="on子句连接"><a href="#on子句连接" class="headerlink" title="on子句连接"></a>on子句连接</h4><p>最常用的连接方式，SQL99语法的连接条件放在on子句中指定，而且每个on子句只指定一个连接条件。如果需要进行N个表连接，则需要N-1个join…on对。</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">select s.*,t.teacher_name from sutdent s (inner) join teacher t on s.teache_id=t.tea_id;</span><br><span class="line"></span><br><span class="line">select role.*,stud1.stud_address,student.stud_cname</span><br><span class="line">from role</span><br><span class="line">join stud1 on role.role_id=stud1.id</span><br><span class="line">join student on role.role_id=student.stud_id</span><br></pre></td></tr></table></figure><h3 id="外连接"><a href="#外连接" class="headerlink" title="外连接"></a>外连接</h3><h4 id="左外连接"><a href="#左外连接" class="headerlink" title="左外连接"></a>左外连接</h4><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">select * from 表1 left (outer) join 表2 on 条件</span><br></pre></td></tr></table></figure><p>相当于查询表1（左表）的所有数据 包含 表1和表2交集部分的数据</p><h4 id="右外连接"><a href="#右外连接" class="headerlink" title="右外连接"></a>右外连接</h4><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">select * from 表1 right (outer) join 表2 on 条件</span><br></pre></td></tr></table></figure><p>相当于查询表2（右表）的所有数据 包含 表1和表2交集部分的数据</p><h3 id="自连接"><a href="#自连接" class="headerlink" title="自连接"></a>自连接</h3><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">select * from 表A 别名A join 表A 别名B on 条件</span><br></pre></td></tr></table></figure><p>自连接查询，可以是内连接查询，也可以是外连接查询</p><p>可以把这一个表通过别名看成两个表然后在进行操作</p><p>联合查询</p><p>关键字：union / union all</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">select * from 表1 where 条件1</span><br><span class="line">union (all)</span><br><span class="line">select * from 表1 where 条件2;</span><br></pre></td></tr></table></figure><p>如果是使用union all 会将两次查询的结果直接合并 如果使用 union 则会先去重然后在进行合并</p><h2 id="子查询"><a href="#子查询" class="headerlink" title="子查询"></a>子查询</h2><p>子查询是指一个查询语句嵌套在另一个查询语句内部的查询；该查询语句可以嵌套在一个 SELECT、SELECT…INTO、INSERT…INTO等语句中。在执行查询时，首先会执行子查询中的语句，再将返回的结果作为外层查询的过滤条件。在子査询中通常可以使用比较运算符和IN、EXISTS、ANY、ALL等关键字。</p><p>比较运算符</p><p>查询张三同学所在班级的信息</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">select * from class where cid=(select classid from student where sname=&#x27;张三&#x27;);</span><br></pre></td></tr></table></figure><p>查询比张三同学所在班级编号还大的班级的信息</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">select * from class where cid&gt;(select classid from student where sname=&#x27;张三&#x27;);</span><br></pre></td></tr></table></figure><p>exists关键字子查询</p><p>EXISTS关键字后面的参数可以是任意一个子查询， 它不产生任何数据只返回TRUE或FALSE。当返回值为TRUE时外层查询才会 执行</p><p>假如王五同学在学生表中则从班级表查询所有班级信息</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">select * from class where exists (select * from student where sname=&#x27;王五&#x27;);</span><br></pre></td></tr></table></figure><h2 id="存储过程"><a href="#存储过程" class="headerlink" title="存储过程*"></a>存储过程*</h2><p>SQL语句需要先编译然后执行，而存储过程（Stored Procedure）是一组为了完成特定功能的SQL语句集，经编译后存储在数据库中，用户通过指定存储过程的名字并给定参数（如果该存储过程带有参数）来调用执行它。</p><p>存储过程是可编程的函数，在数据库中创建并保存，可以由SQL语句和控制结构组成。当想要在不同的应用程序或平台上执行相同的函数，或者封装特定功能时，存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟，它允许控制数据的访问方式。</p><p>存储过程的优点：</p><p>(1).增强SQL语言的功能和灵活性：存储过程可以用控制语句编写，有很强的灵活性，可以完成复杂的判断和较复杂的运算。</p><p>(2).标准组件式编程：存储过程被创建后，可以在程序中被多次调用，而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改，对应用程序源代码毫无影响。</p><p>(3).较快的执行速度：如果某一操作包含大量的Transaction-SQL代码或分别被多次执行，那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时查询，优化器对其进行分析优化，并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化，速度相对要慢一些。</p><p>(4).减少网络流量：针对同一个数据库对象的操作（如查询、修改），如果这一操作所涉及的Transaction-SQL语句被组织进存储过程，那么当在客户计算机上调用该存储过程时，网络中传送的只是该调用语句，从而大大减少网络流量并降低了网络负载。</p><p>(5).作为一种安全机制来充分利用：通过对执行某一存储过程的权限进行限制，能够实现对相应的数据的访问权限的限制，避免了非授权用户对数据的访问，保证了数据的安全。</p><p>语法</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">-- 创建存储过程  参数列表里既有传入又有传出数据</span><br><span class="line">create procedure 存储过程名字(parm[参数列表])</span><br><span class="line">begin</span><br><span class="line">   sql语句</span><br><span class="line">end;</span><br><span class="line"></span><br><span class="line">-- 正常写存储过程 举例</span><br><span class="line">drop procedure if exists query_sub_action;</span><br><span class="line">delimiter //</span><br><span class="line">create procedure query_sub_action(in username varchar(50),in pp_code varchar(30), in cout int)</span><br><span class="line"># 参数列表解释 in/out/inout 参数名 参数格式</span><br><span class="line">begin</span><br><span class="line"># 有begin 也得有end</span><br><span class="line">set @total = (select p_store from product where p_code=pp_code);</span><br><span class="line"># set声明的变量需要前面加一个@符号</span><br><span class="line"># 定义变量也可以用declare但是这个必须写在begin后面 而set就不用 </span><br><span class="line">update product set p_store=(@total-cout) where p_code=pp_code;</span><br><span class="line">insert into userlist values(null,pp_code,username,cout);</span><br><span class="line">end //</span><br><span class="line">-- 解释说明：如语法格式所写，常规的存储过程的语法是没有开始的delimiter // 和结尾的//的这个双斜线的，因为如果按照正常的方式去创建存储过程是出错的，因为使用常规的创建存储过程方法，发现各种报错，无法执行，在SQL SERVER下很容易成功的写法，在MySQL下居然不行，因为在MySQL中需要设置DELIMITER，简单解释下这个命令的用途，在MySQL中每行命令都是用“；”结尾，回车后自动执行，在存储过程中“；”往往不代表指令结束，马上运行，而DELIMITER原本就是“；”的意思，因此用这个命令转换一下“；”为“//”，这样只有收到“//”才认为指令结束可以执行。</span><br><span class="line"></span><br><span class="line">-- 对于workbeach客户端,声明新的结束符用$$</span><br><span class="line"></span><br><span class="line">-- IN 输入参数:表示该参数的值必须在调用存储过程时指定，在存储过程中修改该参数的值不能被返回，为默认值</span><br><span class="line">-- OUT 输出参数:该值可在存储过程内部被改变，并可返回</span><br><span class="line">-- INOUT 输入输出参数:调用时指定，并且可被改变和返回</span><br><span class="line"></span><br><span class="line">-- 调用存储过程</span><br><span class="line">call 存储过程名(参数);</span><br><span class="line"></span><br><span class="line">-- 查询存储过程</span><br><span class="line">show procedure status where db=‘数据库名’;</span><br><span class="line"></span><br><span class="line">-- 删除存储过程</span><br><span class="line">drop procedure 过程名</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>存储过程中的分支循环</p><p>分支</p><p>语法</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">if 条件 then 操作 end if;</span><br><span class="line">if 条件 then 操作 else 操作 end if;</span><br></pre></td></tr></table></figure><p>case when 在条件查询中可用 在存储过程中也可用</p><p>循环</p><p>语法</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">-- 1.while 语句</span><br><span class="line">whlie 条件 </span><br><span class="line">do 操作 end while</span><br><span class="line">-- 2.repeat 语句 类似java中的do-while语句 先执行一次do中的 在判断条件</span><br><span class="line">repeat 操作 until 条件 end repeat;</span><br></pre></td></tr></table></figure><h2 id="事务处理"><a href="#事务处理" class="headerlink" title="事务处理"></a>事务处理</h2><p>MySQL 事务主要用于处理操作量大，复杂度高的数据。比如说，在人员管理系统中，你删除一个人员，你即需要删除人员的基本资料，也要删除和该人员相关的信息，如信箱，文章等等，这样，这些数据库操作语句就构成一个事务！</p><p>事务的特性：</p><p>事务有以下四个标准属性的缩写ACID，通常被称为：Atomicity（原子性）、Consistency（一致性）、isolation（隔离性）、Durability（持久性）。</p><p>原子性: 确保工作单元内的所有操作都成功完成，否则事务将被中止在故障点，或以前的操作将回滚到以前的状态。</p><p>一致性: 确保数据库正确地改变状态后，成功提交的事务。</p><p>隔离性: 使事务操作彼此独立的和透明的。事务独立运行。一个事务处理后的结果，影响了其他事务，那么其他事务会撤回。事务的100%隔离，需要牺牲速度。</p><p>持久性: 确保提交的事务的结果或效果的系统出现故障的情况下仍然存在。</p><p>事务原理</p><p><img src="https://img-blog.csdnimg.cn/e6d339db77fe47c997507eb91ddca398.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBANjI2NjY2,size_20,color_FFFFFF,t_70,g_se,x_16" alt="image-20220221164152194"></p><p>事务使用过程</p><p>开启事务→执行sql语句→成功→提交事务</p><p>​ →失败→回滚事务</p><p>语法</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">-- 开启事务</span><br><span class="line">start transaction;</span><br><span class="line">-- 提交事务</span><br><span class="line">commit;</span><br><span class="line">-- 回滚</span><br><span class="line">rollback;</span><br><span class="line">-- 设置回滚点</span><br><span class="line">savepoint 回滚点名字;</span><br><span class="line">-- 回到回滚点</span><br><span class="line">rollback 回滚点名字;</span><br></pre></td></tr></table></figure><p><strong>ps:存储过程中使用了事务，start transaction，那么在事务之前不能运行有任何可执行的SQL语句</strong></p><h2 id="触发器"><a href="#触发器" class="headerlink" title="触发器"></a>触发器</h2><p>在数据库中，删除一条记录的同时想要删除另一个表里的数据，这时我们可以选择使用触发器。触发器主要是通过事件进行触发被自动调用执行的，而存储过程可以通过存储过程的名称被调用。触发器是当对某一个表进行操作。诸如：update、insert、delete这些操作的时候，系统会自动调用执行该表上对应的触发器。</p><p>创建触发器 语法：</p><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">create trigger tgr_name</span><br><span class="line">on table_name</span><br><span class="line">with encrypion –加密触发器</span><br><span class="line">    for update...</span><br><span class="line">as</span><br><span class="line">    Transact-SQL</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"># 对于每次只处理一条记录的情况，使用简单的触发器是没有问题；当一次处理多条数据的时候，简单的触发器满足不了需求，这里给出一个处理方案；触发器和游标结合使用。</span><br><span class="line"></span><br><span class="line"># 在性能上，游标会吃更多的内存，减少可用的并发，占用宽带，锁定资源。。</span><br><span class="line"></span><br><span class="line">ALTER TRIGGER [dbo].[deleteClassSetTrigger]   -- 新建触发器</span><br><span class="line">ON [dbo].[t_d_ExercitationClassSet]  -- 在某个表中新建的触发器</span><br><span class="line">for delete  -- 做的什么操作触发触发器</span><br><span class="line">AS</span><br><span class="line">BEGIN</span><br><span class="line">declare @id int -- 定义变量id</span><br><span class="line">declare cur_delete cursor  -- 定义游标</span><br><span class="line">for</span><br><span class="line">select ExercitationClassSetId from deleted -- 从删除的数据中找到某个字段值</span><br><span class="line">open cur_delete  --打开游标</span><br><span class="line">fetch next from cur_delete into @id </span><br><span class="line">while @@fetch_status=0</span><br><span class="line">begin</span><br><span class="line">delete t_d_ExercitationClass where ExercitationClassSetId=@id -- 执行符合条件的SQL语句</span><br><span class="line">fetch next from cur_delete into @id -- 查找下一条数据</span><br><span class="line">end</span><br><span class="line">close cur_delete -- 关闭游标</span><br><span class="line">deallocate cur_delete -- 删除游标引用</span><br><span class="line">end</span><br></pre></td></tr></table></figure><h2 id="重点提示"><a href="#重点提示" class="headerlink" title="重点提示"></a>重点提示</h2><p><img src="https://img-blog.csdnimg.cn/384d537848c54571a5697bcead200c0e.png" alt="image-20220221005144495"></p></article><div class="post-copyright"><div class="post-copyright__author"><span class="post-copyright-meta">文章作者:</span> <span class="post-copyright-info"><a href="https://mengfanmingx.gitee.io/">寒兔丶</a></span></div><div class="post-copyright__type"><span class="post-copyright-meta">文章链接:</span> <span class="post-copyright-info"><a href="https://mengfanmingx.gitee.io/posts/2022/09/28/MySQL/">https://mengfanmingx.gitee.io/posts/2022/09/28/MySQL/</a></span></div><div class="post-copyright__notice"><span class="post-copyright-meta">版权声明:</span> <span class="post-copyright-info">本博客所有文章除特别声明外，均采用 <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/" target="_blank">CC BY-NC-SA 4.0</a> 许可协议。转载请注明来自 <a href="https://mengfanmingx.gitee.io" target="_blank">麻辣兔头川菜馆</a>！</span></div></div><div class="tag_share"><div class="post_share"><div class="social-share" data-image="/img/default_cover.png" data-sites="facebook,twitter,wechat,weibo,qq"></div><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/butterfly-extsrc/sharejs/dist/css/share.min.css" media="print" onload='this.media="all"'><script src="https://cdn.jsdelivr.net/npm/butterfly-extsrc/sharejs/dist/js/social-share.min.js" defer></script></div></div><nav class="pagination-post" id="pagination"><div class="prev-post pull-left"><a href="/posts/2022/09/18/java-reflection&amp;annotation/"><img class="prev-cover" src="/img/default_cover2.png" onerror='onerror=null,src="/img/404.jpg"' alt="cover of previous post"><div class="pagination-info"><div class="label">上一篇</div><div class="prev_info">Java反射和注解</div></div></a></div><div class="next-post pull-right"><a href="/posts/2022/12/24/data%20structure&amp;algorithm/"><img class="next-cover" src="/img/default_cover1.png" onerror='onerror=null,src="/img/404.jpg"' alt="cover of next post"><div class="pagination-info"><div class="label">下一篇</div><div class="next_info">数据结构和算法</div></div></a></div></nav><div class="relatedPosts"><div class="headline"><i class="fas fa-thumbs-up fa-fw"></i><span>相关推荐</span></div><div class="relatedPosts-list"><div><a href="/posts/2022/08/24/Linux/" title="Linux学习笔记"><img class="cover" src="/img/default_cover1.png" alt="cover"><div class="content is-center"><div class="date"><i class="far fa-calendar-alt fa-fw"></i> 2022-08-24</div><div class="title">Linux学习笔记</div></div></a></div><div><a href="/posts/2023/03/16/class/" title="java常用类"><img class="cover" src="/img/default_cover1.png" alt="cover"><div class="content is-center"><div class="date"><i class="far fa-calendar-alt fa-fw"></i> 2023-03-16</div><div class="title">java常用类</div></div></a></div><div><a href="/posts/2022/12/24/data%20structure&algorithm/" title="数据结构和算法"><img class="cover" src="/img/default_cover1.png" alt="cover"><div class="content is-center"><div class="date"><i class="far fa-calendar-alt fa-fw"></i> 2022-12-24</div><div class="title">数据结构和算法</div></div></a></div></div></div></div><div class="aside-content" id="aside-content"><div class="sticky_layout"><div class="card-widget" id="card-toc"><div class="item-headline"><i class="fas fa-stream"></i><span>目录</span><span class="toc-percentage"></span></div><div class="toc-content"><ol class="toc"><li class="toc-item toc-level-1"><a class="toc-link" href="#MySQL%E6%95%B0%E6%8D%AE%E5%BA%93%E2%80%94%E2%80%94SQL%E8%AF%AD%E6%B3%95"><span class="toc-number">1.</span> <span class="toc-text">MySQL数据库——SQL语法</span></a><ol class="toc-child"><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%85%B3%E7%B3%BB%E6%95%B0%E6%8D%AE%E5%BA%93%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5%E5%92%8CMySQL%E5%9F%BA%E6%9C%AC%E5%91%BD%E4%BB%A4"><span class="toc-number">1.1.</span> <span class="toc-text">关系数据库基本概念和MySQL基本命令</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#SQL%E8%AF%AD%E5%8F%A5%E5%9F%BA%E7%A1%80"><span class="toc-number">1.2.</span> <span class="toc-text">SQL语句基础</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B"><span class="toc-number">1.3.</span> <span class="toc-text">数据库的数据类型</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E6%95%B0%E6%8D%AE%E5%BA%93%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9CDDL"><span class="toc-number">1.4.</span> <span class="toc-text">数据库基本操作DDL</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E6%95%B0%E6%8D%AE%E8%A1%A8%E7%9A%84%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C"><span class="toc-number">1.5.</span> <span class="toc-text">数据表的基本操作</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E7%BA%A6%E6%9D%9F"><span class="toc-number">1.6.</span> <span class="toc-text">约束</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E4%B8%BA%E6%95%B0%E6%8D%AE%E8%A1%A8%E4%B8%AD%E5%AD%97%E6%AE%B5%E6%8F%92%E5%85%A5%E6%95%B0%E6%8D%AEDML"><span class="toc-number">1.7.</span> <span class="toc-text">为数据表中字段插入数据DML</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%8D%95%E8%A1%A8%E6%9F%A5%E8%AF%A2"><span class="toc-number">1.8.</span> <span class="toc-text">单表查询</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#%E6%9F%A5%E8%AF%A2"><span class="toc-number">1.8.1.</span> <span class="toc-text">查询</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E7%AE%97%E6%95%B0%E8%BF%90%E7%AE%97%E7%AC%A6"><span class="toc-number">1.8.2.</span> <span class="toc-text">算数运算符</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E8%BF%87%E6%BB%A4%E9%87%8D%E5%A4%8D%E4%BF%A1%E6%81%AF"><span class="toc-number">1.8.3.</span> <span class="toc-text">过滤重复信息</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E8%B5%B7%E5%88%AB%E5%90%8D"><span class="toc-number">1.8.4.</span> <span class="toc-text">起别名</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E6%95%B0%E6%8D%AE%E5%BA%93%E5%87%BD%E6%95%B0"><span class="toc-number">1.9.</span> <span class="toc-text">数据库函数*</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#%E8%81%9A%E5%90%88%E5%87%BD%E6%95%B0"><span class="toc-number">1.9.1.</span> <span class="toc-text">聚合函数</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E6%97%A5%E6%9C%9F%E6%97%B6%E9%97%B4%E5%87%BD%E6%95%B0"><span class="toc-number">1.9.2.</span> <span class="toc-text">日期时间函数</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%87%BD%E6%95%B0"><span class="toc-number">1.9.3.</span> <span class="toc-text">字符串函数</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E6%95%B0%E5%AD%A6%EF%BC%88%E6%95%B0%E5%80%BC%EF%BC%89%E5%87%BD%E6%95%B0"><span class="toc-number">1.9.4.</span> <span class="toc-text">数学（数值）函数</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E6%B5%81%E7%A8%8B%E6%8E%A7%E5%88%B6%E5%87%BD%E6%95%B0"><span class="toc-number">1.9.5.</span> <span class="toc-text">流程控制函数</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E6%9D%A1%E4%BB%B6%E6%9F%A5%E8%AF%A2"><span class="toc-number">1.10.</span> <span class="toc-text">条件查询</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%A4%9A%E8%A1%A8%E8%BF%9E%E6%8E%A5%E6%9F%A5%E8%AF%A2"><span class="toc-number">1.11.</span> <span class="toc-text">多表连接查询</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#%E4%BA%A4%E5%8F%89%E8%BF%9E%E6%8E%A5%E6%9F%A5%E8%AF%A2-%E7%AC%9B%E5%8D%A1%E5%B0%94%E7%A7%AF"><span class="toc-number">1.11.1.</span> <span class="toc-text">交叉连接查询(笛卡尔积)</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E5%86%85%E8%BF%9E%E6%8E%A5"><span class="toc-number">1.11.2.</span> <span class="toc-text">内连接</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#%E8%87%AA%E7%84%B6%E8%BF%9E%E6%8E%A5"><span class="toc-number">1.11.2.1.</span> <span class="toc-text">自然连接</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#using%E5%AD%90%E5%8F%A5%E8%BF%9E%E6%8E%A5"><span class="toc-number">1.11.2.2.</span> <span class="toc-text">using子句连接</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#on%E5%AD%90%E5%8F%A5%E8%BF%9E%E6%8E%A5"><span class="toc-number">1.11.2.3.</span> <span class="toc-text">on子句连接</span></a></li></ol></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E5%A4%96%E8%BF%9E%E6%8E%A5"><span class="toc-number">1.11.3.</span> <span class="toc-text">外连接</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%B7%A6%E5%A4%96%E8%BF%9E%E6%8E%A5"><span class="toc-number">1.11.3.1.</span> <span class="toc-text">左外连接</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%8F%B3%E5%A4%96%E8%BF%9E%E6%8E%A5"><span class="toc-number">1.11.3.2.</span> <span class="toc-text">右外连接</span></a></li></ol></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E8%87%AA%E8%BF%9E%E6%8E%A5"><span class="toc-number">1.11.4.</span> <span class="toc-text">自连接</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%AD%90%E6%9F%A5%E8%AF%A2"><span class="toc-number">1.12.</span> <span class="toc-text">子查询</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%AD%98%E5%82%A8%E8%BF%87%E7%A8%8B"><span class="toc-number">1.13.</span> <span class="toc-text">存储过程*</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E4%BA%8B%E5%8A%A1%E5%A4%84%E7%90%86"><span class="toc-number">1.14.</span> <span class="toc-text">事务处理</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E8%A7%A6%E5%8F%91%E5%99%A8"><span class="toc-number">1.15.</span> <span class="toc-text">触发器</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E9%87%8D%E7%82%B9%E6%8F%90%E7%A4%BA"><span class="toc-number">1.16.</span> <span class="toc-text">重点提示</span></a></li></ol></li></ol></div></div></div></div></main><footer id="footer"><div id="footer-wrap"><div class="copyright">&copy;2022 - 2023 By 寒兔丶</div><div class="framework-info"><span>框架</span> <a target="_blank" rel="noopener" href="https://hexo.io">Hexo</a><span class="footer-separator">|</span><span>主题</span> <a target="_blank" rel="noopener" href="https://github.com/jerryc127/hexo-theme-butterfly">Butterfly</a></div><div class="footer_custom_text">别看了，什么都没有了！QwQ</div></div></footer></div><div id="rightside"><div id="rightside-config-hide"><button id="readmode" type="button" title="阅读模式"><i class="fas fa-book-open"></i></button><button id="translateLink" type="button" title="简繁转换">繁</button><button id="darkmode" type="button" title="浅色和深色模式转换"><i class="fas fa-adjust"></i></button><button id="hide-aside-btn" type="button" title="单栏和双栏切换"><i class="fas fa-arrows-alt-h"></i></button></div><div id="rightside-config-show"><button id="go-up" type="button" title="回到顶部"><i class="fas fa-arrow-up"></i><span id="percent">0</span></button></div></div><div id="local-search"><div class="search-dialog"><nav class="search-nav"><span class="search-dialog-title">搜索</span><span id="loading-status"></span><button class="search-close-button"><i class="fas fa-times"></i></button></nav><div class="is-center" id="loading-database"><i class="fas fa-spinner fa-pulse"></i> <span>数据库加载中</span></div><div class="search-wrap"><div id="local-search-input"><div class="local-search-box"><input class="local-search-box--input" placeholder="搜索文章" type="text"></div></div><hr><div id="local-search-results"></div></div></div><div id="search-mask"></div></div><div><script src="https://unpkg.com/hexo-theme-butterfly/source/js/utils.js"></script><script src="https://unpkg.com/hexo-theme-butterfly/source/js/main.js"></script><script src="https://unpkg.com/hexo-theme-butterfly/source/js/tw_cn.js"></script><script src="https://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox.umd.min.js"></script><script src="https://cdn.jsdelivr.net/npm/instant.page/instantpage.min.js" type="module"></script><script src="https://unpkg.com/hexo-theme-butterfly/source/js/search/local-search.js"></script><script>var preloader={endLoading:()=>{document.body.style.overflow="auto",document.getElementById("loading-box").classList.add("loaded")},initLoading:()=>{document.body.style.overflow="",document.getElementById("loading-box").classList.remove("loaded")}};window.addEventListener("load",preloader.endLoading())</script><div class="js-pjax"></div><div class="aplayer no-destroy" data-id="7322622901" data-server="tencent" data-type="playlist" data-fixed="true" data-mini="true" data-listfolded="false" data-order="random" data-preload="auto" data-volume="0.4" data-lrctype="-1"></div><script>window.onload=function(){document.getElementsByTagName("html")[0].setAttribute("data-theme","light")}</script><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.css" media="print" onload='this.media="all"'><script src="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js"></script><script src="https://cdn.jsdelivr.net/npm/butterfly-extsrc/metingjs/dist/Meting.min.js"></script><script src="https://cdn.jsdelivr.net/npm/pjax/pjax.js"></script><script>let pjaxSelectors=["head > title","#config-diff","#body-wrap","#rightside-config-hide","#rightside-config-show",".js-pjax"];var pjax=new Pjax({elements:'a:not([target="_blank"])',selectors:pjaxSelectors,cacheBust:!1,analytics:!1,scrollRestoration:!1});document.addEventListener("pjax:send",(function(){if(window.tocScrollFn&&window.removeEventListener("scroll",window.tocScrollFn),window.scrollCollect&&window.removeEventListener("scroll",scrollCollect),"object"==typeof preloader&&preloader.initLoading(),document.getElementById("rightside").style.cssText="opacity: ''; transform: ''",window.aplayers)for(let e=0;e<window.aplayers.length;e++)window.aplayers[e].options.fixed||window.aplayers[e].destroy();"object"==typeof typed&&typed.destroy();const e=document.body.classList;e.contains("read-mode")&&e.remove("read-mode"),"object"==typeof disqusjs&&disqusjs.destroy()})),document.addEventListener("pjax:complete",(function(){window.refreshFn(),document.querySelectorAll("script[data-pjax]").forEach((e=>{const t=document.createElement("script"),o=e.text||e.textContent||e.innerHTML||"";Array.from(e.attributes).forEach((e=>t.setAttribute(e.name,e.value))),t.appendChild(document.createTextNode(o)),e.parentNode.replaceChild(t,e)})),GLOBAL_CONFIG.islazyload&&window.lazyLoadInstance.update(),"function"==typeof chatBtnFn&&chatBtnFn(),"function"==typeof panguInit&&panguInit(),"function"==typeof gtag&&gtag("config","",{page_path:window.location.pathname}),"object"==typeof _hmt&&_hmt.push(["_trackPageview",window.location.pathname]),"function"==typeof loadMeting&&document.getElementsByClassName("aplayer").length&&loadMeting(),"object"==typeof Prism&&Prism.highlightAll(),"object"==typeof preloader&&preloader.endLoading()})),document.addEventListener("pjax:error",(e=>{404===e.request.status&&pjax.loadUrl("/404.html")}))</script><script async data-pjax src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script></div><script data-pjax>function butterfly_clock_injector_config(){var c=document.getElementsByClassName("sticky_layout")[0];console.log("已挂载butterfly_clock"),c.insertAdjacentHTML("afterbegin",'<div class="card-widget card-clock"><div class="card-glass"><div class="card-background"><div class="card-content"><div id="hexo_electric_clock"><img class="entered loading" id="card-clock-loading" src="https://npm.elemecdn.com/hexo-butterfly-clock/lib/loading.gif" style="height: 120px; width: 100%;" data-ll-status="loading"/></div></div></div></div></div>')}for(var elist="/posts/".split(","),cpage=location.pathname,epage="all",flag=0,i=0;i<elist.length;i++)cpage.includes(elist[i])&&flag++;("all"===epage&&0==flag||epage===cpage)&&butterfly_clock_injector_config()</script><script src="https://pv.sohu.com/cityjson?ie=utf-8"></script><script data-pjax src="https://npm.elemecdn.com/hexo-butterfly-clock/lib/clock.min.js"></script></body></html><div id="sakana-widget" style="position:fixed;bottom:10px;right:10px"></div><script>function initSakanaWidget(){(new SakanaWidget).mount("#sakana-widget")}</script><script async onload="initSakanaWidget()" src="https://cdn.jsdelivr.net/npm/sakana-widget@2.2.1/lib/sakana.min.js"></script>